#coding=utf-8
"""
LoNote translate 翻譯模組

定義翻譯功能 API。


"""

import os
import gettext
import functools
import locale

import bottle


LOCALE_DIR = None # None 表示使用系統預設位置，否則必須從外部進行設定



def _getlocale_codes(request):
    '''從 bottle.request 中取得一個列表，其中記錄了期望使用的語言順序'''
    def normalize(code):
        '''把取得的locale名稱字串大小寫固定為標準的 zh_TW 這種格式'''
        frags = code.split('-')
        if len(frags) == 2:
            ans = frags[0].lower() + '_' + frags[1].upper()
        else:
            ans = frags[0].lower()
        return ans
    codes = request.environ.get("HTTP_ACCEPT_LANGUAGE", "").split(";")[0].split(',')
    return (i for i in map(normalize, codes))

@functools.lru_cache()
def _get_gettext_func(codes):
    '''依照順序套用可用的 codes'''
    try:
        trans = gettext.translation('lonote', LOCALE_DIR, languages = codes)
        return trans.gettext
    except (IOError, OSError):
        return gettext.gettext

def get_gettext_func():
    '''將 _get_gettext_func 的操作自動化'''
    codes = _getlocale_codes(bottle.request)
    return _get_gettext_func(codes)

def get_server_gettext_func():
    '''使用 server 預設語系來取得 gettext function'''
    try:
        lang, enc = locale.getdefaultlocale()
        trans = gettext.translation('lonote', LOCALE_DIR, languages = [lang])
        return trans.gettext
    except (IOError, OSError):
        return gettext.gettext

